const { initToClose } = require('../mongoose/database');
// token
const { generateToken, verifyJwt } = require('../utils/index')
// jwt 表类
// const Jwt = require('../data/jwtData')
const User = require('../data/userData');
// const crypto = require('crypto');



const { sendEmail } = require('../utils/email');
const userC = require('../controller/userC');
let userCode = {}

// 代码暂存
const r = () => {
  // async adds (req, res) {
  //   try {
  //     //打开数据库
  //     await connectDB()
  //     const newUser = await User.create({
  //       id: new Date().getTime().toString(),
  //       name: 'zhangshan',
  //       age: 23,
  //       email: '104984515@qq.com',
  //     });
  //     closeDB()
  //     res.status(200).json(newUser);
  //     // res.send({ code: 200, message: 'okadd' });

  //   } catch (err) {
  //     console.log(err);
  //     res.status(500).json({ error: err });

  //   }

  // },
  // deleteByid (req, res) {
  //   res.send({ code: 200, message: 'okdelete' });
  // },
  // async updateByid (req, res) {
  //   try {
  //     //打开数据库
  //     await connectDB()
  //     const user = await User.update('6716882b0d067d4d39609102', { name: 'daipu' });
  //     closeDB()
  //     res.status(200).json(user);
  //   } catch (err) {
  //     console.log(err);
  //     res.status(500).json({ error: err });
  //   }



  //   res.send({ code: 200, message: 'okupdate' });
  // },
  // async gets (req, res) {

  //   try {
  //     //打开数据库
  //     await connectDB()
  //     const users = await User.find();
  //     res.status(200).json(users);
  //     closeDB()
  //   } catch (err) {
  //     console.log(err);
  //     res.send({ code: 500, message: err });

  //   }
  // }
  // 验证码

}

// console.log(random, '随机数')
module.exports = {
  async codes (req, res) {

    console.log(req.query, '请求')
    // 错误处理
    if (!req.query.email || req.query.email === '') {
      res.send({ code: 403, msg: '请输入正确邮箱!' })
      return
    }
    // // 验证码处理
    const number = Math.floor(Math.random() * 10000).toString().padStart(4, '0')
    console.log(number)
    userCode[`${req.query.email}`] = number
    sendEmail(req.query.email, userCode[req.query.email])
    // // 清空
    setTimeout(() => {
      userCode[req.query.email] = ''
    }, 300000)
    res.send({ code: 200, msg: '发送成功', })
  },

  // 注册
  async sign (req, res) {

    //操作数据库
    /* 
    1.定义变量
    reuser 用户名
    repwd  密码
    reemail 邮箱
    recode 验证码

    2.用户名查找
    2.1判断用户名是否存在 通过用户名查找数据这条数据是否存在(>0)
    2.2判断邮箱是否存在 =>查找数据库数据>0 
    2.3存在提示用户
  
    2.4判断验证是否正确 =>正确添加数据返回code200 注册成功 =>  数据库添加数据,
    如果数据报错提示用户数据异常
    不正确提示用户4000+

    */
    //业务逻辑
    let user = req.body

    initToClose(async () => {
      console.log(userCode, 'smdx1')
      const data = await User.find({ username: user.username })
      if (data.length > 0) {
        res.send({ code: 400, msg: '用户已存在' })
        return
      }
      const data2 = await User.find({ email: user.email })
      if (data2.length > 0) {
        res.send({ code: 400, msg: '邮箱已被注册' })
        return
      }
      if (user.code !== userCode[`${req.body.email}`]) {
        res.send({ code: 400, msg: '验证码不正确' })
        return
      }
      //插入到数据库
      // 你看下需要插入哪些参数
      const moonuser = await User.create({
        username: user.username,
        email: user.email,
        password: user.password,
      })
      res.send({ code: 200, msg: '添加成功', data: moonuser })
    })


    //返回前端
    // res.send({ code: 200, msg: req.body })
  },
  // 登录
  async login (req, res) {
    /* 
    业务逻辑
    1.获取用户传递参数
    1.1 查找数据库数据=>返回数据=>跟req做判断
    1.2 如果user pwd 一样放行
    1.3 错误4000+
    */
    const ava = [
      { url: 'http://localhost:51733/tx/tox1.png' },
      { url: 'http://localhost:51733/tx/tox2.png' },
      { url: 'http://localhost:51733/tx/tox3.png' },
      { url: 'http://localhost:51733/tx/tox4.png' },
      { url: 'http://localhost:51733/tx/tox5.png' },
    ]
    const random = () => Math.floor(Math.random() * ava.length)
    let user = req.body
    initToClose(async () => {
      //操作数据库
      const data = await User.find({ username: user.username })
      if (data.length === 0) {
        res.send({ code: 400, msg: '用户名或密码错误!' })
      }
      if (data[0].password === user.password) {
        // const secret = crypto.randomBytes(20).toString('hex');
        // keys[data[0]._id] = secret
        //存key到数据库中  加一个表  存userId和
        let token = generateToken({ id: data[0]._id })

        // 用户id查库有没有这条数据,有的话更新jwt就可以了,没有再创建
        // const is = await Jwt.find({ userId: data[0]._id.toString() })
        // if (is.length > 0) {
        //   // 
        //   await Jwt.update(is[0]._id.toString(), { jwt: secret })
        // } else {
        //   await Jwt.create({
        //     userId: data[0]._id.toString(),
        //     jwt: secret,
        //   })
        // }
        // 存表

        res.send({ code: 200, msg: '登录成功', token, id: data[0]._id, avatar: ava[random()] })
      } else {
        res.send({ code: 400, msg: '密码错误!' })
      }
    })
    //返回前端
  }



}